package Visitor;

/**
 * @author Sorica Alexandra
 * @date 12.12.2011
 * @version 1.0
 */

import arbori.ArboreFunctional;
import arbori.Nod;
import functii.Constanta;
import functii.Necunoscuta;
import functii.Cos;
import functii.Sin;
import operatori.*;

public class DerivareVisitor extends Visitor {
	String rezultat;
	ToStringVisitor tsv = new ToStringVisitor();

	public String getS() {
		return rezultat;
	}

	public void setS(String rezultat) {
		this.rezultat = rezultat;
	}

	public DerivareVisitor(String rezultat) {
		super();
		this.rezultat = rezultat;
	}

	public DerivareVisitor() {
		super();
	}

	public void visit(Produs p) {
		if (p.getNs() != null && p.getNs() != null) {
			visit(p.getNs());
			String f1D = this.rezultat;
			visit(p.getNs());
			String f2D = this.rezultat;
			p.getNs().acceptVisitor(tsv);
			String f1 = tsv.getS();
			p.getNd().acceptVisitor(tsv);
			String f2 = tsv.getS();
			this.rezultat = Plus.concatTermens(Produs.concatTermens(f1D, f2),
					Produs.concatTermens(f1, f2D));
		}
	}

	public void visit(Plus p) {

	}

	public void visit(Minus m) {

	}

	public void visit(Cat c) {

	}

	public void visit(Necunoscuta n) {

	}

	public void visit(Constanta c) {

	}

	public void visit(Sin s) {
		if (s.getNs() != null) {
			visit(s.getNs());
			String fsd = this.rezultat;
			s.getNs().acceptVisitor(tsv);
			String fs = tsv.getS();
			this.rezultat = Produs.concatTermens(Cos.concatTermens(fs), fsd);
		}
	}

	public void visit(Cos c) {
		if (c.getNs() != null) {
			visit(c.getNs());
			String fsd = this.rezultat;
			c.getNs().acceptVisitor(tsv);
			String fs = tsv.getS();
			this.rezultat = Produs.concatTermens("-"+Sin.concatTermens(fs), fsd);
		}
	}

	public void visit(Nod n) {

	}

	public void visit(ArboreFunctional a) {

	}
}
